package cn.iocoder.yudao.framework.excel.core.strategy;


import cn.iocoder.yudao.framework.excel.core.strategy.impl.DictCvicseStrategyImpl;
import cn.iocoder.yudao.framework.excel.core.strategy.impl.DictExcellentStrategyImpl;

import java.util.List;

/**
 * 处理不同租户的字典策略上下文。
 * 根据不同租户ID选择不同的策略实现，用于处理字典数据的获取和转换。
 *
 * @Author LiZhiMin
 * @Date 2024/9/4 9:53
 */
public class DictTenantContext {

    // 租户策略的接口引用，根据不同租户ID选择不同的实现
    private final DictTenantStrategy tenantStrategy;

    /**
     * 构造函数，根据租户ID选择对应的策略实现。
     *
     * @param tenantId 租户ID，根据该ID选择不同的字典策略实现
     * @throws IllegalArgumentException 如果提供的租户ID不受支持，则抛出该异常
     */
    public DictTenantContext(int tenantId) {
        // 根据租户ID选择不同的策略实现
        if (tenantId == 1) { // 假设1是租户A  中创
            tenantStrategy = new DictCvicseStrategyImpl();
        } else if (tenantId == 2) { // 假设2是租户B  卓越
            tenantStrategy = new DictExcellentStrategyImpl();
        } else {
            throw new IllegalArgumentException("找不到Unsupported tenant ID: " + tenantId);
        }
    }

    /**
     * 获取字典标签根据字典类型和字典值。
     *
     * @param dictType 字典类型
     * @param value    字典值
     * @return 对应的字典标签
     */
    public String getDictDataLabel(String dictType, String value) {
        return tenantStrategy.getDictDataLabel(dictType, value);
    }

    /**
     * 获取字典标签列表根据字典类型。
     *
     * @param dictType 字典类型
     * @return 字典标签列表
     */
    public List<String> getDictDataLabelList(String dictType) {
        return tenantStrategy.getDictDataLabelList(dictType);
    }

    /**
     * 获取字典值列表根据字典类型。
     *
     * @param dictType 字典类型
     * @return 字典值列表
     */
    public List<String> getDictDataValueList(String dictType) {
        return tenantStrategy.getDictDataValueList(dictType);
    }

    /**
     * 根据字典类型和字典标签获取字典值。
     *
     * @param dictType 字典类型
     * @param label    字典标签
     * @return 对应的字典值
     */
    public String parseDictDataValue(String dictType, String label) {
        return tenantStrategy.parseDictDataValue(dictType, label);
    }

    /**
     * 获取字典标签根据字典类型和字典标签（code是Integer类型）。
     *
     * @param dictType 字典类型
     * @param code     字典标签的代码（Integer类型）
     * @return 对应的字典标签
     */
    public String getDictDataLabel(String dictType, Integer code) {
        return tenantStrategy.getDictDataLabel(dictType, code);
    }
}
